package com.dp.server;

import java.util.Date;
import java.util.Properties;  
import javax.mail.Message;  
import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;  
import javax.mail.PasswordAuthentication;
import javax.mail.Session;  
import javax.mail.Transport;  
import javax.mail.internet.InternetAddress;  
import javax.mail.internet.MimeMessage;  

import com.dp.client.dto.AlmacenDTO;
import com.dp.client.dto.ClienteDTO;
import com.dp.client.dto.PaqueteDTO;
import com.dp.server.entities.Cliente;
  
public class IServiciosEnviarCorreo {  
	private Session m_Session;
    private Message m_simpleMessage;
    private InternetAddress m_fromAddress;
    private InternetAddress m_toAddress;
    private Properties m_properties;
	
	    public void sendMail(String m_to,String m_subject,String m_body)
	    {
	      try {
	 
	            m_properties     = new Properties();
	            m_properties.put("mail.smtp.host", "smtp.gmail.com");
	            m_properties.put("mail.smtp.socketFactory.port", "465");
	            m_properties.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
	            m_properties.put("mail.smtp.auth", "true");
	            m_properties.put("mail.smtp.port", "465");
	             
	 
	            m_Session        =   Session.getDefaultInstance(m_properties,new Authenticator() 
	            {
	                protected PasswordAuthentication getPasswordAuthentication() {
	                    return new PasswordAuthentication("palomino.j@pucp.pe","Hikari06-10"); // username and the password
	                }
	 
	            });
	             
	            m_simpleMessage  =   new MimeMessage(m_Session);
	 
	            m_fromAddress    =   new InternetAddress("palomino.j@pucp.pe");
	            m_toAddress      =   new InternetAddress(m_to);
	 
	 
	            m_simpleMessage.setFrom(m_fromAddress);
	            m_simpleMessage.setRecipient(RecipientType.TO, m_toAddress);
	            m_simpleMessage.setSubject(m_subject);
	            m_simpleMessage.setContent(m_body,"text/plain");
	 
	            Transport.send(m_simpleMessage);
	 
	        } catch (MessagingException ex) {
	            ex.printStackTrace();
	        }
	    }
	    
	    public String RegistrarPaquete(ClienteDTO emisor, ClienteDTO receptor, PaqueteDTO paquete)
	    {
	    	String asunto = "Registro de paquete";
	    	String mensaje = "Estimado cliente "+emisor.getNombre()+" "+emisor.getApellido1()+". Gracias por utilizar nuestro servicio su paquete # "+paquete.codigo+" ha sido registrado y su codigo secreto es: "+paquete.getNroSecretoDestinatario();
	    	sendMail(emisor.getCorreo(),asunto,mensaje);
	    	
	    	mensaje = "Estimado cliente "+receptor.getNombre()+" "+receptor.getApellido1()+". Gracias por utilizar nuestro servicio su paquete # "+paquete.codigo+" ha sido registrado y su codigo secreteo es: "+paquete.getNroSecretoRemitente();
	    	sendMail(receptor.getCorreo(),asunto,mensaje);
	    	return null;
	    }
	    
	    public String CambioRuta(int idEmisor,int idReceptor, PaqueteDTO paquete)
	    {
	    	IServiciosClienteImpl serviciosCliente = new IServiciosClienteImpl();
	    	Cliente emisor = serviciosCliente.buscarCliente(idEmisor);
	    	Cliente receptor = serviciosCliente.buscarCliente(idReceptor);
	    	IServiciosAlmacenImpl serviciosAlmacen=new IServiciosAlmacenImpl ();
	    	AlmacenDTO almacen = serviciosAlmacen.getAlmacen(paquete.almacenActual);
	    	AlmacenDTO almacen2 = serviciosAlmacen.getAlmacen(paquete.almacenDestino);
	    	int j=0;
	    	if(almacen.getCiudad().getPais().getContinente().getId()==almacen2.getCiudad().getPais().getContinente().getId())
	    		j=1;
	    	else
	    		j=2;
	    	Date fecha2 = new Date(paquete.getFechaEstimadaLlegada().getTime()+j*24*60*60*1000);
	    	String mensaje = "Estimado cliente "+emisor.getNombre()+" "+emisor.getApellido1()+" "+emisor.getApellido2()+" le informamos que su paquete con codigo "+paquete.codigo+" esta retrasado por lo que se espera que llegue el "+fecha2;
	    	System.out.println(mensaje);
	    	sendMail(emisor.getCorreo(),"Retraso de paquete",mensaje);
	    	mensaje = "Estimado cliente "+receptor.getNombre()+" "+receptor.getApellido1()+" "+receptor.getApellido2()+" le informamos que su paquete con codigo "+paquete.codigo+" esta retrasado por lo que se espera que llegue el "+fecha2;
	    	System.out.println(mensaje);
	    	sendMail(receptor.getCorreo(),"Retraso de paquete",mensaje);
	    	return "Exito";
	    }
} 
